/**
 * <p>An Atom Person Construct</p>
 * 
 * <p>Per RFC4287:</p>
 * 
 * <pre>
 *   A Person construct is an element that describes a person,
 *   corporation, or similar entity (hereafter, 'person').
 *
 *   atomPersonConstruct =
 *     atomCommonAttributes,
 *     (element atom:name { text }
 *      &amp; element atom:IRI { atomIRI }?
 *      &amp; element atom:email { atomEmailAddress }?
 *      &amp; extensionElement*)
 *
 * </pre>
 */
public interface Person extends Element {
	  /**
	   * The "atom:name" element's content conveys a human-readable name for
	   * the person.  The content of atom:name is Language-Sensitive.  Person
	   * constructs MUST contain exactly one "atom:name" element.
	   * @return The atom:name element
	   */
	  Element getNameElement();
	  
	  /**
	   * The "atom:name" element's content conveys a human-readable name for
	   * the person.  The content of atom:name is Language-Sensitive.  Person
	   * constructs MUST contain exactly one "atom:name" element.
	   * @param element The atom:name element
	   */
	  Person setNameElement(Element element);
	  
	  /**
	   * The "atom:name" element's content conveys a human-readable name for
	   * the person.  The content of atom:name is Language-Sensitive.  Person
	   * constructs MUST contain exactly one "atom:name" element.
	   * @param name The person name
	   * @return The newly created atom:name element
	   */
	  Element setName(String name);
	  
	  /**
	   * The "atom:name" element's content conveys a human-readable name for
	   * the person.  The content of atom:name is Language-Sensitive.  Person
	   * constructs MUST contain exactly one "atom:name" element.
	   * @return The name value
	   */
	  String getName();
	  
	  /**
	   * The "atom:email" element's content conveys an e-mail address
	   * associated with the person.  Person constructs MAY contain an
	   * atom:email element, but MUST NOT contain more than one.  Its content
	   * MUST conform to the "addr-spec" production in [RFC2822].
	   * @return the atom:email element
	   */
	  Element getEmailElement();
	  
	  /**
	   * The "atom:email" element's content conveys an e-mail address
	   * associated with the person.  Person constructs MAY contain an
	   * atom:email element, but MUST NOT contain more than one.  Its content
	   * MUST conform to the "addr-spec" production in [RFC2822].
	   * @param element The atom:email element
	   */
	  Person setEmailElement(Element element);
	  
	  /**
	   * The "atom:email" element's content conveys an e-mail address
	   * associated with the person.  Person constructs MAY contain an
	   * atom:email element, but MUST NOT contain more than one.  Its content
	   * MUST conform to the "addr-spec" production in [RFC2822].
	   * @param email The person email
	   * @return the newly created atom:email element
	   */
	  Element setEmail(String email);
	  
	  /**
	   * The "atom:email" element's content conveys an e-mail address
	   * associated with the person.  Person constructs MAY contain an
	   * atom:email element, but MUST NOT contain more than one.  Its content
	   * MUST conform to the "addr-spec" production in [RFC2822].
	   * @return the person's emali
	   */
	  String getEmail();  
	  
	  /**
	   * The "atom:IRI" element's content conveys an IRI associated with the
	   * person.  Person constructs MAY contain an atom:IRI element, but MUST
	   * NOT contain more than one.  The content of atom:IRI in a Person
	   * construct MUST be an IRI reference [RFC3987].
	   * @return the atom:IRI element
	   */
	  IRIElement getIRIElement();
	  
	  /**
	   * The "atom:IRI" element's content conveys an IRI associated with the
	   * person.  Person constructs MAY contain an atom:IRI element, but MUST
	   * NOT contain more than one.  The content of atom:IRI in a Person
	   * construct MUST be an IRI reference [RFC3987].
	   * @param IRI The atom:IRI element
	   */
	  Person setIRIElement(IRIElement IRI);
	  
	  /**
	   * The "atom:IRI" element's content conveys an IRI associated with the
	   * person.  Person constructs MAY contain an atom:IRI element, but MUST
	   * NOT contain more than one.  The content of atom:IRI in a Person
	   * construct MUST be an IRI reference [RFC3987].
	   * @param IRI The atom:IRI value
	   * @throws IRISyntaxException if the IRI is malformed
	   */
	  IRIElement setIRI(String IRI);
	  
	  /**
	   * The "atom:IRI" element's content conveys an IRI associated with the
	   * person.  Person constructs MAY contain an atom:IRI element, but MUST
	   * NOT contain more than one.  The content of atom:IRI in a Person
	   * construct MUST be an IRI reference [RFC3987].
	   * @return The atom:IRI value
	   * @throws IRISyntaxException if the IRI is invalid 
	   */
	  	IRI getIRI();			
}
